<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<title>深拷贝,浅拷贝</title>
	</head>
	<body>
		<script>
			/*
			 *涉及问题,什么是深拷贝,什么是浅拷贝,如何实现浅拷贝,如何实现深拷贝
			 *
			 * 我们了解到对象类型在赋值的过程中其实是在复制了地址,从而导致改变了一方其他也都被改变的情况。通常在开发中我们不希望出现这样的问题,
			 * 我们可以使用浅拷贝来解决这个问题
			 *
			 * 通常情况使用浅拷贝就可以解决大部分问题,特殊情况使用深拷贝
			 *
			 * 浅拷贝解决办法  Object.assign() ,assign只是把一个对象的地址拷贝了过去, 使用展开运算符{...a}
			 *  深拷贝解决办法 JSON.parse(JSON.stringify(object)) 来解决    JSON.parse:json转js,JSON.stringify:js转json
			 *
			 *  深拷贝的缺点:会忽略undefined 会忽略symbol 不能序列化函数 不能解决循环引用问题
			 * */

			/*
			 * 问题:什么是浅拷贝,什么是深拷贝?
			 *
			 * 简单来说  假设B复制了A,当修改A时,B会跟着变化,说明这就是浅拷贝,如果没有变化就是深拷贝
			 * */
			//浅拷贝,(浅拷贝只能解决一层的问题)
			let a = {
				age: 10,
			}

			//assign解决办法
			//let b = Object.assign({},a);

			//使用展开运算符解决办法
			let b = { ...a }

			a.age = 20
			console.log(b.age) //10

			//深拷贝
			let aa = {
				age: 1,
				jobs: {
					first: 'FE',
				},
			}
			let bb = JSON.parse(JSON.stringify(aa))
			aa.jobs.first = 'native'
			console.log(bb.jobs.first) //FE
		</script>
	</body>
</html>
